package com.lonewalker.sparrow.entity;

import com.baomidou.mybatisplus.annotation.*;
import lombok.Data;

import java.io.Serializable;
import java.util.Date;

/**
 * @author lonewalker
 */
@Data
public abstract class BaseEntity implements Serializable {
    private static final long serialVersionUID = 1L;
    /**
     * 主键 (数据库自动增长)<br>
     * <ol>
     * <li>{@code IdType.NONE} 该类型为未设置主键类型(注解里等于跟随全局,全局里约等于 INPUT)</li>
     * <li>{@code IdType.ASSIGN_ID   nextId} 支持自动转换为String类型，但数值类型不支持自动转换，需精准匹配，例如返回Long，实体主键就不支持定义为 Integer</li>
     * <li>{@code IdType.ASSIGN_UUID nextUUID} 默认不含中划线的UUID生成</li>
     * <li>其他类型参考 {@link IdType} </li>
     * </ol>
     * 如果不写type,那么默认就是第一种
     */
    @TableId(value = "id", type = IdType.ASSIGN_ID)
    private Long id;
    /**
     * 创建时间  <br>
     * <ol>
     *  <li>{@code FieldFill.DEFAULT}：默认不进行填充，依赖于数据库的默认值或手动设置。</li>
     * <li>{@code  FieldFill.INSERT}：在插入操作时自动填充字段值。</li>
     * <li>{@code  FieldFill.UPDATE}：在更新操作时自动填充字段值。</li>
     * <li>{@code  FieldFill.INSERT_UPDATE}：在插入和更新操作时都会自动填充字段值。</li>
     * </ol>
     */
    @TableField(value = "create_time", fill = FieldFill.INSERT)
    private Date createTime;
    /**
     * 修改时间
     */
    @TableField(value = "update_time", fill = FieldFill.INSERT_UPDATE)
    private Date updateTime;
    /**
     * 删除标识
     */
    @TableLogic
    @TableField(value = "deleted", fill = FieldFill.INSERT)
    private Integer deleted;
}
